import re
import shutil
import logging

from pandas import Series

logging.basicConfig(
    level=logging.DEBUG,
    # 格式说明：
    # %(levelname)8s → 右对齐，总宽度8个字符
    format='%(levelname)8s: %(message)s'
)


def find_duplicates(items: Series) -> bool:
    """查找并打印Series中的重复项"""
    # 计算每个值的出现次数
    value_counts = items.value_counts()

    # 找出重复项（出现次数大于1）
    duplicates = value_counts[value_counts > 1]

    if not duplicates.empty:
        logging.info(f"列表中有 {len(duplicates)} 个重复项:")
        for i, (value, count) in enumerate(duplicates.items(), 1):
            logging.info(f"{i}. {value} (出现次数: {count})")
        return True
    else:
        return False


def extract_parts_from_series(series, pattern, part_index, ):
    logging.debug("in extract_parts_from_series()")
    logging.debug(f"从形如 [{series[0]}] 的内容中")
    logging.debug(f"以正则规则 [{pattern}]")
    logging.debug(f"获取其中第[{part_index}]部分的内容")

    """
    从符合格式的字符串Series中提取指定部分

    参数:
    series : pandas Series, 包含格式为 "aaa-bbb-ccc.ddd.eee.fff" 的字符串
    part_index : 要提取的部分索引 (1-6)

    返回:
    pd.Series : 包含提取部分的Series

    异常:
    ValueError: 当part_index不在1-6范围内
    """
    if pattern is None or pattern == "":
        raise ValueError("pattern 不能为空")

    # 验证部分索引
    if part_index < 1 or part_index > 6:
        raise ValueError("part_index 必须在 1 到 6 之间")

    # 编译高效的正则表达式
    # pattern = re.compile(r'^([^-\.]+)-([^-\.]+)-([^-\.]+)\.([^-\.]+)\.([^-\.]+)\.([^-\.]+)$')

    # 提取函数
    def extract_part(s):
        match = re.compile(pattern).match(s)
        if match:
            return match.group(part_index)
        return None  # 不符合格式的返回None

    # 应用提取函数并返回Series
    return series.apply(extract_part)


def check_filename_format(filename_list, pattern: str):
    invalid_strings = []

    for s in filename_list:
        if not bool(re.match(pattern, s)):
            invalid_strings.append(s)

    if invalid_strings:
        logging.debug("以下字符串不符合格式要求:")
        for s in invalid_strings:
            logging.debug(f"  - {s}")
        logging.error(f"\n总计: {len(invalid_strings)} 个字符串不符合规则")
        exit(0)
    else:
        logging.info("所有字符串都符合格式要求!")


def copy_docx(source_path, destination_path):
    """
    从作业模板文件复制出各个同学的作业 docx 文件
    """
    try:
        shutil.copy2(source_path, destination_path)
        logging.info(f"文件复制成功: {source_path} -> {destination_path}")
        return True
    except FileNotFoundError:
        print(f"错误: 源文件不存在 - {source_path}")
    except PermissionError:
        print(f"错误: 没有权限复制文件 - {source_path}")
    except Exception as e:
        print(f"复制文件出错: {str(e)}")
    return False


if __name__ == '__main__':
    文档 = '([^-\.]+)'
    班级 = '([^-\.]+)'
    学号 = '([0-9]{11})'
    姓名 = '([^-\.]+)'
    日期 = '([0-9]{4})'
    后缀 = '([^-\.]+)'
    # pattern = r'^([^-\.]+)-([^-\.]+)-([^-\.+])-([^-\.]+)\.([^-\.]+)\.([^-\.]+)\.([^-\.]+)$'
    pattern = (
        r'^'
        f"{文档}"
        f"-{班级}"
        f"-{学号}"
        f"-{姓名}"
        f".{日期}"
        f".{后缀}"
        r'$'
    )

    s = '《企业级应用开发课程设计（企业）》报告-软工华为2201-20211119003-闵鑫杰.0619.docx'
    match = re.compile(pattern).match(s)
    ret = match.group(2)  # 1-base 参数
    print(ret)
